package br.com.fiap.atividade5.aspects;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

import br.com.fiap.atividade5.business.PedidoBusiness;
import br.com.fiap.atividade5.entity.Pedido;
import br.com.fiap.atividade5.entity.PedidoProduto;

public aspect CalcValorPedidoAspect {
	
	pointcut calcValorPedido(Pedido p) : execution(public void PedidoBusiness.calculateValorTotal(Pedido)) && args(p);
	
	after(Pedido p) : calcValorPedido(p) {
		
		List<PedidoProduto> pedidoProdutos = p.getPedidosProduto();
		
		BigDecimal valorTotal = BigDecimal.ZERO;
		
		if (pedidoProdutos.size() > 10) {
			for (PedidoProduto pp : pedidoProdutos) {
				if (!pp.isHasDescontoQuantidadeItens()) {
					BigDecimal desconto = pp.getDesconto();
					
					if (desconto == null) {
						desconto = BigDecimal.ZERO;
					}
					
					pp.setDesconto(desconto.add(pp.getTotal().multiply(new BigDecimal("0.05"))));
					pp.setTotal(pp.getTotal().multiply(new BigDecimal("0.95")));
					pp.setHasDescontoQuantidadeItens(true);
				}
				
				valorTotal = valorTotal.add(pp.getTotal());
			}
			
			p.setValorTotal(valorTotal);
			
		}
		
		addTaxaAdicional(p);
		
	}
	
	private void addTaxaAdicional(Pedido pedido) {
		
		Calendar c = Calendar.getInstance();
		c.setTime(pedido.getData());
		
		int mes = c.get(Calendar.MONTH);
		
		if (mes >= Calendar.AUGUST && mes <= Calendar.SEPTEMBER) {
			pedido.setValorTotal(pedido.getValorTotal().multiply(new BigDecimal("1.1")));
		}
		
	}

}
